package br.edu.ifrn.mb;

import java.util.List;

import javax.faces.event.ActionEvent;

import br.edu.ifrn.dao.CursoDAO;
import br.edu.ifrn.dao.DiretoriaDAO;
import br.edu.ifrn.dao.UsuarioDAO;
import br.edu.ifrn.dominio.Curso;
import br.edu.ifrn.dominio.Diretoria;
import br.edu.ifrn.dominio.Perfil;
import br.edu.ifrn.dominio.Usuario;
import br.edu.ifrn.exception.NegocioException;
import br.edu.ifrn.generic.GenericDAO;
import br.edu.ifrn.mb.generic.GenericCrudMB;
import br.edu.ifrn.util.FacesUtil;

public class ManageCurso extends GenericCrudMB<Curso> {
	
	private String nomeCurso;

	public ManageCurso() {
		super();
		this.exibirTodosRegistrosAoPesquisar = false;
		if(!FacesUtil.getSessionUser().getUsuario().isAdministrador()){
			this.setWhereScope(" WHERE curso.diretoria.id = "+FacesUtil.getSessionUser().getDiretoria().getId());
		}
	}
	
	@Override
	protected GenericDAO<Curso> getDao() {
		return new CursoDAO();
	}

	@Override
	public String getTitulo() {
		return "Curso";
	}
	
	@Override
	public String incluir() {
		if(!FacesUtil.getSessionUser().getUsuario().isAdministrador()){
			this.dadosForm.setDiretoria(FacesUtil.getSessionUser().getDiretoria());
		}
		return super.incluir();
	}
	
	public void filtrar() throws NegocioException {
		if(FacesUtil.getSessionUser().getUsuario().isAdministrador()){
			this.dadosPesquisa = this.getDao().consultarTodos(" WHERE UPPER(curso.nome) LIKE '%"+this.getNomeCurso().toUpperCase()+"%'", "");
		}else{
			this.dadosPesquisa = this.getDao().consultarTodos(" WHERE UPPER(curso.nome) LIKE '%"+this.getNomeCurso().toUpperCase()+"%' AND curso.diretoria.id = "+FacesUtil.getSessionUser().getDiretoria().getId(), "");
		}
	}
	public void doNothing(ActionEvent evt){
	}
	public List<Diretoria> getDiretorias(){
		try {
			return new DiretoriaDAO().consultarTodos();
		} catch (NegocioException e) {
			FacesUtil.adicionarMensagemErro("Não foi possível consultar as diretorias");
			e.printStackTrace();
			return null;
		}
	}
	
	public List<Usuario> getCoordenadoresDaDiretoria(){
		return new UsuarioDAO().recuperarPorPerfil(Perfil.Coordenador, Perfil.Professor, this.getDadosForm().getDiretoria());
	}
	
	public List<Usuario> getCoordenadores(){
		return new UsuarioDAO().recuperarPorPerfil(Perfil.Coordenador, Perfil.Professor, FacesUtil.getSessionUser().getDiretoria());
	}
	
	public void setNomeCurso(String nomeCurso) {
		this.nomeCurso = nomeCurso;
	}

	public String getNomeCurso() {
		return nomeCurso;
	}
}
